package com.celan.year2023.month02.day12;

class Solution {
    public String alphabetBoardPath(String target) {
        //出发点
        int x = 0, y = 0;
        StringBuilder res = new StringBuilder();
        for (int i = 0; i < target.length(); i++) {
            //目标字符
            char tar = target.charAt(i);
            //目标字符的坐标
            int tarX = (tar - 'a') / 5;
            int tarY = (tar - 'a') % 5;
            /**
             * 最后一个字母‘z’，到达的方式是先向左再向下，为了保证含有字符‘z’时能够正常移动
             * 我们移动的顺序需要遵循规则，优先级：左 > 下  上 > 右
             * 这样就不会存在走出界的情况
             */
            //如果目标点在当前点上面
            if (tarX < x) {
                for (int j = 0; j < x - tarX; j++) {
                    res.append('U');
                }
            }
            //如果目标点在当前点左边
            if (tarY < y) {
                for (int j = 0; j < y - tarY; j++) {
                    res.append('L');
                }
            }
            //如果目标点在当前点下边
            if (tarX > x) {
                for (int j = 0; j < tarX - x; j++) {
                    res.append('D');
                }
            }
            //如果目标点在当前点右边
            if (tarY > y) {
                for (int j = 0; j < tarY - y; j++) {
                    res.append('R');
                }
            }
            res.append('!');
            x = tarX;
            y = tarY;
        }
        return res.toString();
    }
}